大家看到 Google Gemini CLI(以下以及本系列都將簡稱之 Gemini)這個標題,大概會以為這又是一個 Gemini CLI 的教學。是 CLI 的教學沒錯,只是我想看看再進一步的東西... 喔,不對,是進好幾步的東西。
第一次看到 Gemini 剛上市的時候,不只是我,明眼人一看就知道這不就是抄隔壁棚的那個誰誰誰嗎!我不確定 Google 官方有沒有跳出來否認這件事,但比賽就是這樣的!好像跑步游泳一樣,還不是你做什麼他就做什麼!有什麼好抗議的?抗議無效!
不一樣的是,Gemini 專案是開放原始碼的,只要有心,人人都可以是食神... 不是,是只要有心,每個人都可以下載原始碼來看看裡面是怎麼回事。所以,既然隔壁棚的那個誰誰誰沒有開源,那我看看能不能從 Google 團隊所開發的 Gemini 的原始碼說來學點東西。
快速的看了一下 GitHub Repo,專案主要使用 TypeScript/JavaScript,應該不會太難懂,而且如果只有十幾萬行程式碼的話,雖然是個挑戰,但還不致於看不完。去年的鐵人賽寫了「為你自己讀 CPython 原始碼」系列文章,CPython 都啃的下去了,JavaScript 應該更不成問題(吧),所以,今年鐵人賽就來挑戰「為你自己學 Gemini CLI ... 的原始碼」系列文章吧!
是說,都什麼年代了,為什麼 CLI (Command Line Interface)這種看起來黑黑的而且有點落後的技術大家都拼命抄... 不是,是拼命做?可能是大家從出生開始就已經習慣 GUI 介面了,所以可能不知道 CLI 有哪些好用的地方:
對其它人來說可能還好,但這個功能對我這種原本就習慣使用 CLI 介面在做事的人真的是太香了!想像一下,你正在寫程式寫到一半,突然需要查個系統資訊、改個檔案權限、或是跑個 Docker 指令。以前你可能要切換視窗、開終端機、輸入指令、看結果、再切回來繼續... 現在呢可以直接在 CLI 裡面叫 AI 幫你執行這些指令。
重點是,這些 Shell 指令還不用自己寫,我們可以用自然語言跟 Gemini 說「幫我找出所有超過 100MB 的檔案並且按照大小排序」,AI 會自動幫你組合出 find . -type f -size +100M -exec ls -lh {} \; | sort -rh
這種你可能要 Google 半天才寫得出來的神奇指令。
不要小看這一根 |
,這可是個好東西!這根東西又稱「管線(Pipe)」,它可以把一個程式或指令的輸出結果當作另一個程式或指令的輸入,像接水管一樣把功能串起來,如果各位曾經接觸過「函數式程式設計(Functional Programming, FP)」可以把一堆函數串在一起,就會知道這東西有多好用。有了 AI CLI 之後,你可以像組樂高積木一樣,組出更有趣的組合技,例如:
$ cat error.log | gemini -p "分析這些錯誤訊息的模式" | claude -p "產生修復腳本" > fix.sh
先把錯誤日誌丟進去,最終產生修復的腳本,中間能把好幾家不同的 CLI 摻在一起做撒尿牛丸!這種組合技在 GUI 介面根本做不到。你可以把 AI 當成一個超級聰明的 grep
或 awk
來用,只是它懂自然語言而已。
每個編輯器都有自己的 AI 外掛:VS Code 有 Copilot、Windsurf、Cursor 有自己的 AI、JetBrains 也有... 問題是,這些 AI 都是綁在特定的編輯器裡,換個編輯器可能就得再熟悉一套,而且有些功能這個有另一個沒有。有了 CLI 版本,管你用什麼編輯器,反正都可以呼叫同一個 AI。你可以在 Vim 裡面用 :!gemini
呼叫它或是在 VS Code 開個終端機... 總之,一招走天下,不用再為了 AI 功能而換編輯器了。
「Server 為什麼這麼慢?是記憶體被吃光了嗎?」這樣的情況對老手來說可能不是什麼多難解決的問題,大概下個 top
或 htop
就能看出狀況,不過對沒經驗的新手來說可能就有點頭痛了。這時候 Gemini 就可以派上用場,直接在 Server 上把 Gemini 裝起來,請它分析系統狀態,或是直接請它針對問題寫個修復腳本,就不用來來回回測試好多次才能把問題抓出來。可能有些人沒想過可以這樣玩,但這對我來說真的是挺方便的!
提醒:投資理財有賺有賠,在 Server 上做這件事有其風險,請自行評估風險並且知道自己在做什麼,萬一出了什麼事請不要說是我教你的。
要研究原始碼,總得先想辦法取得一份,
$ git clone git@github.com:google-gemini/gemini-cli.git
$ cd gemini-cli
$ git switch 2135dbb6 --detach
HEAD 目前位於 2135dbb6 Fix #8077: Settings command overwrites entire JSON file, leaking environment variables (#8154)
為什麼特別切換到 2135dbb6
這個 Commit?沒什麼原因,就只是剛好我在寫這篇文章的時候 GitHub 上剛好就是這個 Commit,而且 Gemini 專案目前不斷的有新的 PR 被合併進來,不固定版本根本看不完。也就是說,如果各位想要跟著一起研究 Gemini 的原始碼,可以跟我一樣從這個 Commit 開始。
還需要什麼工具嗎?不用,只要準備一個順手的文字編輯器跟好奇心就夠了。
準備好了嗎?下一集就開始正式來翻 Gemini 的原始碼囉!
各位前輩好,弱弱的新手有幾個問題請教:
1.需要使用什麼作業系統?
2.建議或推薦的文字編輯器?
感謝~~
建議:
我覺得鎖定在某一個特定版本的 Release Tag 可能比所鎖定在一個特定的 commit 有意義一些,而且 Git 命令也會比較單純一點,例如:
git clone https://github.com/google-gemini/gemini-cli.git -b v0.5.5
的確,當下最新的 commit 跟最近的 release tag 應該不會差太多,也不用記奇怪的數字
另外就是 git@github.com:google-gemini/gemini-cli.git
主要是給用 SSH 連線的人使用的,Windows 用戶大多都用 https 為主。雖然我知道你用 macOS 為主,應該不影響,但大多 Windows 用戶可能照著你的命令會無法下載 Repo!
PS C:\Projects> git clone git@github.com:google-gemini/gemini-cli.git
Cloning into 'gemini-cli'...
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
PS C:\Projects>
以下是透過 HTTPS 的取得方式:
PS C:\Projects> git clone https://github.com/google-gemini/gemini-cli.git
Cloning into 'gemini-cli'...
remote: Enumerating objects: 47671, done.
remote: Counting objects: 100% (1086/1086), done.
remote: Compressing objects: 100% (413/413), done.
remote: Total 47671 (delta 967), reused 684 (delta 673), pack-reused 46585 (from 5)
Receiving objects: 100% (47671/47671), 37.52 MiB | 3.29 MiB/s, done.
Resolving deltas: 100% (34066/34066), done.
PS C:\Projects>
感謝版主分享這篇關於 Gemini CLI 的深度解析!非常認同您提到開源的重要性,這確實是學習和進步的絕佳途徑。看到您決定挑戰閱讀 Gemini 的 TypeScript/JavaScript 原始碼,這份毅力很讓人佩服,期待您的系列文章能為大家帶來豐富的開發洞見。
您對 CLI 優勢的分析也相當精闢,特別是「Pipe 組合技」能將多個 AI 工具串聯起來,以及在 Server 上直接運用 AI 進行診斷和自動化,這些實務應用確實展現了 CLI 的強大潛力,開啟了新的工作流程想像。AI 輔助生成複雜 Shell 指令的功能,更是許多開發者夢寐以求的,能大幅提升效率。感謝您的精彩分享!
也歡迎版主有空參考我的系列文「南桃AI重生記」:
https://ithelp.ithome.com.tw/users/20046160/ironman/8311